perm filename BRIDG2.SAI[ALS,ALS]1 blob
sn#266408 filedate 1977-03-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "FOURSOME"
C00010 ENDMK
C⊗;
BEGIN "FOURSOME";
DEFINE ⊂="BEGIN",⊃="END",$="COMMENT";
DEFINE BOARDS="6",PLAYERS="16";
INTEGER ARRAY SET,SET1,SET2[0:16,0:6]; $ Trial, initial and adopted arrays;
INTEGER ARRAY HIT,HIT1,HIT2[0:16,0:16];
INTEGER ARRAY NONO,NONO1,NONO2,NONO3[0:16,0:16];
INTEGER H,I,I2,J,K,K2,L,M,M2,N,N2,P,Q,R,T,U,V,W,X;
INTEGER CHAN,HITMAX,HITNUM,HITMA2,HITNU2,HITSUM,HITSUM2;
STRING TALLY;
CHAN←1;
FOR J←1 STEP 1 UNTIL 6 DO
⊂ "JJ"
T←J; U←0; OUTSTR('15&'12&"J="&CVS(J)&'15&'12);
FOR I←1 STEP 1 UNTIL 16 DO
⊂ "II"
IF SET[I,J]>0 THEN CONTINUE "II";
HITSUM←256;
T←T-1; IF T=0 THEN T←4; IF T>4 THEN T←T-4;
OUTSTR(" T="&CVS(T));
SET[I,J]←(T LSH 27);
ARRTRAN(SET1,SET); ARRTRAN(HIT1,HIT); $ Save to restore for LL trials;
ARRTRAN(NONO1,NONO); $ Save for conclusion of LL trials;
FOR L←1 STEP 1 UNTIL 15 DO $ To minimize HITS;
⊂ "LL"
FOR K←1 STEP 1 UNTIL 16 DO
⊂ "KK"
IF SET[K,J]>0 THEN CONTINUE "KK";
IF NONO[I,K]=0 THEN DONE "KK";
⊃ "KK";
IF K>16 THEN DONE "LL";
NONO[I,K]←NONO[K,I]←1;
ARRTRAN(NONO3,NONO); $ Save for next LL trial
HITMA2←HITMAX; HITNU2←HITNUM;
SET[I,J]←SET[I,J]+(K LSH 18); SET[K,J]←(T LSH 27)+(I LSH 18);
FOR Q←0 STEP 1 UNTIL 6 DO
⊂ "QQ"
FOR M←16 STEP -1 UNTIL 1 DO
⊂ "MM"
IF SET[M,J]>0 THEN CONTINUE "MM";
IF HIT[I,M]+HIT[J,M]≤Q THEN DONE "QQ";
⊃ "MM";
⊃ "QQ";
IF Q>6 THEN
⊂ ARRTRAN(SET,SET1); ARRTRAN(HIT,HIT1); $ Restore and repeat with a new K;
ARRTRAN(NONO,NONO3);
CONTINUE "LL"; ⊃;
HIT[I,M]←HIT[I,M]+1; HIT[K,M]←HIT[K,M]+1;
HIT[M,I]←HIT[M,I]+1; HIT[M,K]←HIT[M,K]+1;
IF Q>HITMAX THEN HITMAX←Q; IF Q>0 THEN HITNUM←HITNUM+1;
SET[I,J]←SET[I,J]+M LSH 9; SET[K,J]←SET[K,J]+M LSH 9;
SET[M,J]←(T LSH 27)+(I LSH 9)+K;
FOR R←0 STEP 1 UNTIL 6 DO
⊂ "RR"
FOR N←1 STEP 1 UNTIL 16 DO
⊂ "NN"
IF NONO[M,N]>0 THEN CONTINUE "NN";
IF SET[N,J]>0 THEN CONTINUE "NN";
IF HIT[I,N]+HIT[K,N]≤R THEN DONE "RR";
⊃ "NN";
⊃ "RR";
IF R>6 THEN
⊂ ARRTRAN(SET,SET1); ARRTRAN(HIT,HIT1); $ Restore and repeat with a new K;
ARRTRAN(NONO,NONO3);
CONTINUE "LL"; ⊃;
IF R>HITMAX THEN HITMAX←R; IF R>0 THEN HITNUM←HITNUM+1;
NONO[M,N]←NONO[N,M]←1;
SET[I,J]←SET[I,J]+N; SET[K,J]←SET[K,J]+N;
SET[M,J]←SET[M,J]+N LSH 18;
SET[N,J]←(T LSH 27)+(M LSH 18)+(I LSH 9)+K;
HIT[I,N]←HIT[I,N]+1; HIT[K,N]←HIT[K,N]+1;
HIT[N,I]←HIT[N,I]+1; HIT[N,K]←HIT[N,K]+1;
X←0;
FOR V←1 STEP 1 UNTIL 16 DO
FOR W←1 STEP 1 UNTIL 16 DO
IF HIT[V,W]>0 THEN X←X+HIT[V,W]-1;
IF X<HITSUM THEN
⊂ HITSUM←X; $ Save best LL try to date;
ARRTRAN(SET2,SET); ARRTRAN(HIT2,HIT);
I2←I; K2←K; M2←M; N2←N; $ Save these instead of NONO2, and fix NONO later;
⊃ ;
IF X=0 THEN DONE "LL";
ARRTRAN(SET,SET1); $ Restore initial contitions for next try;
ARRTRAN(HIT,HIT1);
ARRTRAN(NONO,NONO3); $ Use 3 to prevent repeat on K;
⊃ "LL";
OUTSTR(" "&CVS(I2)&","&CVS(K2)&","&CVS(M2)&","&CVS(N2)&" H="&CVS(HITSUM));
ARRTRAN(SET,SET2); $ Reset for best LL try;
ARRTRAN(HIT,HIT2);
ARRTRAN(NONO,NONO1); $ Must go back to this and fix it;
NONO[I2,K2]←NONO[M2,N2]←NONO[K2,I2]←NONO[N2,M2]←1;
⊃ "II";
⊃ "JJ";
OUTSTR('15&'12&"MAX HIT = "&CVS(HITMAX)&" NUM HITS = "&CVS(HITNUM));
TALLY←"\|\\M1CORON;\M2BDI40;\M3NGR40;";
P←0;
FOR I←1 STEP 1 UNTIL 16 DO
⊂ "III"
TALLY←TALLY&"\F1 Player No. "
&CVS(I)&'11&"Name"&'15&'12&'15&'12&"\F2Round Table With Score"&'15&'12;
FOR J←1 STEP 1 UNTIL 6 DO
⊂ "JJJ"
T←LDB(POINT(9,SET[I,J],8));
K←LDB(POINT(9,SET[I,J],17));
TALLY←TALLY&CVS(J)&'11&'11&CVS(T)&'11&'11&CVS(K)&'15&'12;
⊃ "JJJ";
TALLY←TALLY&"\F3"&'11&'11&'11&'11&'11&"Total"&'15&'12&'15&'12&'15&'12;
P←P+1; IF P=3 THEN
⊂ P←0; TALLY←TALLY&'14; ⊃ ELSE TALLY←TALLY&'15&'12&'15&'12&'15&'12;
⊃ "III";
TALLY←TALLY&CVS(HITNUM)&" opponent duplications with a maximum of "&CVS(HITMAX);
CLOSE(CHAN); OPEN(CHAN,"DSK",0,0,2,0,0,0);
ENTER(CHAN,"TALLY[ALS,ALS]",0);
OUT(CHAN,TALLY); CLOSE(CHAN);
⊃ "FOURSOME";